A 4-bit multiplier operates similarly to manual multiplication, but in binary.
For two 4-bit numbers A and B, the process involves:


Block Diagram

4 bit binary muiltiplier.png


Verilog Implementation

module Multiplier4(A, B, P);
    input [3:0] A, B;
    output [7:0] P;

    wire [3:0] MUout0, MUout1, MUout2, MUout3;
    wire [3:0] S0, S1;
    wire CLAout0, CLAout1;

    // Partial products
    MultiplierUnit MU0(.A(A), .B(B[0]), .MUout(MUout0));
    MultiplierUnit MU1(.A(A), .B(B[1]), .MUout(MUout1));
    MultiplierUnit MU2(.A(A), .B(B[2]), .MUout(MUout2));
    MultiplierUnit MU3(.A(A), .B(B[3]), .MUout(MUout3));

    // First CLA
    CLA4 CLA0(
        .C_in(1'b0),
        .A({1'b0, MUout0[3:1]}),
        .B(MUout1),
        .S(S0),
        .C_out(CLAout0)
    );

    // Second CLA
    CLA4 CLA1(
        .C_in(1'b0),
        .A({CLAout0, S0[3:1]}),
        .B(MUout2),
        .S(S1),
        .C_out(CLAout1)
    );

    // Third CLA
    CLA4 CLA2(
        .C_in(1'b0),
        .A({CLAout1, S1[3:1]}),
        .B(MUout3),
        .S(P[6:3]),
        .C_out(P[7])
    );

    // Output bits
    assign P[0] = MUout0[0];
    assign P[1] = S0[0];
    assign P[2] = S1[0];
endmodule